#ifndef __gpio_H
#define __gpio_H
#ifdef __cplusplus
 extern "C" {
#endif

/* Includes ------------------------------------------------------------------*/
#include "gd32f4xx.h"
#include "main.h"

#define HAL_GPIO_ReadPin(gpio_periph, pin)                   gpio_input_bit_get(gpio_periph, pin)
#define HAL_GPIO_WritePin(gpio_periph, pin, bit_value)       gpio_bit_write(gpio_periph, pin, bit_value)

enum GPIO_IN{
    NULL_IN = 0,
    IO_S1_HOME,
    IO_S2_HOME,
    IO_V1_HOME,
    IO_V2_HOME,
    IO_V3_HOME,
    IO_S1_LIMIT,
    IO_S2_LIMIT,
    IO_PREL_EXIST,
    IO_PRER_EXIST,
    IO_IMPORTL_READY,
    IO_IMPORTR_READY,
    IO_TUBE_EXIST,
    IO_RACK_FIXED,
    IO_EXPORT_READY,
    IO_STARTL_PRESSED,
    IO_STARTR_PRESSED,
    IO_STOP_PRESSED,
    IO_SWITCH1,
    IO_SWITCH2,
    IO_SWITCH3,
    IO_SWITCH4,
    IO_SWITCH5,
    IO_SWITCH6,
    IO_BASKETL_EXIST,
    IO_BASKETR_EXIST,
    IO_HAT_EXIST,

    GPIO_IN_COUNT
};

enum GPIO_OUT{
    IO_S1_LOCK,
    IO_S2_LOCK,
    IO_V1_LOCK,
    IO_V2_LOCK,
    IO_V3_LOCK,
    IO_T1_LOCK,
    IO_S1_CW,
    IO_S2_CW,
    IO_V1_CW,
    IO_V2_CW,
    IO_V3_CW,
    IO_T1_CW,
    IO_S1_EN,
    IO_S2_EN,
    IO_V1_EN,
    IO_V2_EN,
    IO_V3_EN,
    IO_T1_EN,              // mapped to MACHINE_ROLE S..V..T


    IO_STATELED,
    IO_STARTL_LED,
    IO_STARTR_LED,
    IO_NTRIG,

    GPIO_OUT_COUNT
};

// 端口
typedef struct PORT_GROUP
{
    uint8_t inverse;
    uint32_t port;
    uint16_t pin;
} PORT_GROUP;

extern PORT_GROUP gportin[GPIO_IN_COUNT];
extern PORT_GROUP gportout[GPIO_OUT_COUNT];


void MX_GPIO_Init(void);
void InitgportList(void);


#ifdef __cplusplus
}
#endif
#endif /*__ pinoutConfig_H */

